import pymysql
import time
import logging

# 配置日志
log_file = "db_connection.log"  # 日志文件名
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler(log_file),  # 将日志写入文件
        logging.StreamHandler()         # 同时在控制台输出日志
    ]
)

# 数据库连接配置
db_config = {
    "host": "192.168.3.29",  # 数据库服务器地址
    "user": "root",       # 数据库用户名
    "password": "root1234",  # 数据库密码
    "database": "uwb_gps_hd",   # 要连接的数据库名
    "port": 3306,         # 数据库端口号
}

# 连接数据库函数
def connect_db():
    try:
        # 尝试建立数据库连接
        conn = pymysql.connect(**db_config)
        logging.info("连接成功")
        return conn
    except pymysql.MySQLError as e:
        # 如果失败，记录错误信息并返回None
        logging.error(f"连接失败，错误信息：{e}")
        return None

# 执行数据库操作
def execute_query(conn):
    try:
        with conn.cursor() as cursor:
            cursor.execute("SELECT * FROM `uwb_gps_hd`.`map_device` WHERE `device_id` LIKE '%GW00001%' ")
            row = cursor.fetchall()
            logging.info(row)
    except pymysql.MySQLError as e:
        logging.error(f"执行查询失败，错误信息：{e}")

# 主函数
def main():
    max_retries = 3  # 最大重连次数
    retry_delay = 2  # 重连间隔时间（秒）

    for attempt in range(max_retries):
        logging.info(f"尝试连接数据库（第{attempt + 1}次）...")
        conn = connect_db()
        if conn:
            try:
                # 如果连接成功，执行数据库操作
                execute_query(conn)
            finally:
                conn.close()
            break
        else:
            # 如果连接失败，等待一段时间后重试
            logging.info(f"等待{retry_delay}秒后重试...")
            time.sleep(retry_delay)
    else:
        # 如果重试次数用完仍未连接成功，记录最终失败信息
        logging.error("重试次数用完，连接失败")

if __name__ == "__main__":
    main()